/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package caintra.Sapra.Pantalla.QuincenalMensual;

import caintra.Sapra.ComponentsImplements.BotonCaintra;
import caintra.Sapra.Model.Calendariofacturacionpracticantes;
import caintra.Sapra.Model.Empresa;
import caintra.Sapra.Model.Facturaajuste;
import caintra.Sapra.Model.MovimientosCaintra;
import caintra.Sapra.Reportes.Prefactura.iniciarReporte;
import caintra.Sapra.Model.Practicante;
import caintra.Sapra.Model.PrefacturaCaintra;
import caintra.Sapra.Model.PrefacturaDetalle;
import caintra.Sapra.Model.PrefacturaDetalleQM;
import caintra.Sapra.Model.PrefacturaQM;
import caintra.Sapra.Model.Usuario;
import caintra.Sapra.Pantalla.Abono.AbonoQuery;
import caintra.Sapra.Pantalla.Abono.AbonoView;
import caintra.Sapra.Pantalla.Ajuste.DecisionPane;
import caintra.Sapra.Reportes.Prefactura.ReporteExcel;
import java.text.DecimalFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import nextapp.echo2.app.Table;
import nextapp.echo2.app.event.ActionEvent;
import nextapp.echo2.app.event.ActionListener;
import nextapp.echo2.app.table.DefaultTableModel;
import nextapp.echo2.app.table.TableModel;
import java.util.HashMap;
import nextapp.echo2.app.Column;
import nextapp.echo2.app.ContentPane;
import nextapp.echo2.app.Extent;
import nextapp.echo2.app.Insets;
import nextapp.echo2.app.Row;
import org.sapra.abc.dPracticante;
import org.sapra.dao.BanorteCuentas;
import org.sapra.dao.EMailMO;

/**
 *
 * @author Administrador
 */
public class PrefacturaMControllerQM implements ActionListener {

    public PrefacturaMViewQM vista;
    public PrefacturaMQueryQM query;
    public List<Calendariofacturacionpracticantes> lista_periodo;
    public Calendariofacturacionpracticantes fecha, fecha2;
    public List<Practicante> Lista_Mayor, Lista_Mayor2, li, l2;
    public List<MovimientosCaintra> lista_mov;
    public ArrayList<Practicante> Lista_Pantalla, Lista_Detalle, Lista_Pantalla2, Lista_Detalle2;
    public Empresa empresa;
    public Table tabla;
    public TableModel tm;
    public HashMap Lista_Pract_Hm, Lista_Pract_Hm2;
    public int seleccion_practicante = -1;
    public int seleccion_practicante1 = -1;
    public int seleccion_practicante2 = -1;

    public int long_cuenta = 0;
    public Practicante p_sel;
    SimpleDateFormat formato = new SimpleDateFormat("yyyy-MM-dd");
    SimpleDateFormat formato2 = new SimpleDateFormat("dd");
    public Usuario usuario;
    public boolean autorizada;
    public PrefacturaCaintra factura, fact;
    public PrefacturaQM factura2;
    public List<PrefacturaDetalleQM> factura_DetalleQM;
    public List<PrefacturaDetalle> fac_Detalle1, fac_Detalle2;
    public EMailMO email;
    //AbonoView ab;
    //AbonoController ac;
    public int iva = 16;
    public int comision = 1;
    public double _abono;
    public double _adeudo;
    final int Autorizada = 1;
    final int No_Autorizada = 2;
    final int Sin_Practicantes = 3;
    final int Administrador = 1;
    final int No_Administrador = 2;

    int Autorizada1 =0;
    int Autorizada2 =0;

    public int tipo_proceso = 0;
    public int tipo_usuario = 0;
    public boolean autorizada1;
    public boolean autorizada2;
    BotonCaintra autp2, autp1, seg1, seg2;
    BotonCaintra cancelar, imp_rep1, imp_rep2;
    Row r1, r2;
    public int per=0;

    public void error(String msj) {
        //this.vista.removeAll();
        this.vista.window_error.setVisible(true);
        this.vista.add(this.vista.window_error);
        this.vista.window_error.mensaje_Panel(msj);


    }

    public void error2() {
        this.vista.window_error.setVisible(true);
        this.vista.add(this.vista.window_error);
    }

    public PrefacturaMControllerQM(PrefacturaMViewQM vista) {
        try {
            this.vista = vista;
            email = new EMailMO();
            query = new PrefacturaMQueryQM();
            init();
        } catch (Exception e) {
            error("lb_error_cargapagina");
        }
    }

    public void init() {
        try {
            this.vista.tabla_qm.addActionListener(this);
            this.vista.sel_periodos.addActionListener(this);
            this.vista.sel_periodo2.addActionListener(this);
            this.vista.ver_reporte.addActionListener(this);
            this.vista.autorizar.addActionListener(this);
            this.vista.cancelar.addActionListener(this);
            this.vista.actualizar.addActionListener(this);
            this.vista.movimientos.addActionListener(this);
            this.vista.ok_cuenta.addActionListener(this);
            this.vista.abono_adeudo.addActionListener(this);
            this.vista.b_seguro.addActionListener(this);
            this.vista.v_p1.addActionListener(this);
            this.vista.v_p2.addActionListener(this);

            this.vista.window_abono.setVisible(false);
            this.vista.window_decision.setVisible(true);
            this.vista.window_detail.setVisible(false);
            this.vista.window_error.setVisible(false);


            usuario = query.getUsuario(this.vista.usuarioId);  // obtiene el objeto del usuario que accesa  por su id

            if (usuario == null) { // si el usuario es null manda a error
                error("prefactura_sin_usuario");
                return;
            }
            empresa = query.getEmpresas(this.vista.empresaId);  //se obtiene la empresa por su id

            if (empresa == null) { //si la empresa es null manda a error
                error("prefactura_sin_empresa");
                return;
            }
            if (usuario.getTipoUsuario().equals("A") || usuario.getTipoUsuario().equals("E") || usuario.getTipoUsuario().equals("G") || usuario.getTipoUsuario().equals("C")) {
                if (usuario.getTipoUsuario().equals("A")) {
                    tipo_usuario = 1;
                } else {
                    tipo_usuario = 2;
                }
            } else {
                error("Tipo de Usuario No Valido");
            }
            Action_selectEmpresa();//envia por primera y unica vez para obtener el periodo en curso
        } catch (Exception e) {
            error("lb_error_cargapagina");
        }
    }

    public void permisos() {
        try {
            this.vista.window_decision.setVisible(false);

            if (Autorizada == tipo_proceso) {//si la prefactura esta autorizada
                this.vista.cancelar.setVisible(false);
                if (tipo_usuario == Administrador) {
                    this.vista.cancelar.setVisible(true);
                }
                this.vista.b_seguro.setVisible(false);
                this.vista.movimientos.setVisible(false);
                this.vista.lb_usuario.setVisible(true);
                this.vista.ok_cuenta.setVisible(false);
                this.vista.txt_cuenta.setVisible(false);
                this.vista.autorizar.setVisible(false);
                this.vista.lb_cuenta.setVisible(false);
                this.vista.abono_adeudo.setVisible(false);

            }
            if (No_Autorizada == tipo_proceso) {//si la prefactura esta autorizada
                this.vista.autorizar.setVisible(true);
                this.vista.cancelar.setVisible(false);
                this.vista.movimientos.setVisible(true);
                this.vista.lb_usuario.setVisible(false);
                if (tipo_usuario == Administrador) {
                    this.vista.b_seguro.setVisible(false);
                    this.vista.lb_cuenta.setVisible(true);
                    this.vista.ok_cuenta.setVisible(true);
                    this.vista.txt_cuenta.setVisible(true);
                    this.vista.cancelar.setVisible(false);
                }

            }
            if (Sin_Practicantes == tipo_proceso) {
                this.vista.b_seguro.setVisible(false);
                this.vista.movimientos.setVisible(false);
                this.vista.abono_adeudo.setVisible(false);
                this.vista.ok_cuenta.setVisible(false);
                this.vista.autorizar.setVisible(false);
                this.vista.cancelar.setVisible(false);
                this.vista.ver_reporte.setVisible(false);
                this.vista.txt_cuenta.setVisible(false);
                this.vista.tabla_qm.setVisible(false);
                this.vista.total_table.setVisible(false);

                this.vista.lb_vista_reporte.setVisible(false);
                this.vista.lb_usuario.setVisible(false);
                this.vista.lb_cuenta.setVisible(false);
                this.vista.sel_vista_reporte.setVisible(false);
                this.vista.lb_estatus.setVisible(false);

                return;


            }

            this.vista.abono_adeudo.setVisible(true);
            this.vista.lb_vista_reporte.setVisible(true);
            this.vista.sel_vista_reporte.setVisible(true);
            this.vista.ver_reporte.setVisible(true);
            this.vista.lb_estatus.setVisible(true);
            this.vista.lb_convenio.setVisible(true);
            this.vista.tabla_qm.setVisible(true);
            this.vista.total_table.setVisible(true);





            if (empresa.getFk_bancoId() == 1) {
                this.vista.txt_cuenta.setMaximumLength(9);
                long_cuenta = 9;
            } else {
                if (empresa.getFk_bancoId() == 3) {
                    this.vista.txt_cuenta.setMaximumLength(17);
                    long_cuenta = 17;
                }

            }

        } catch (Exception e) {
        }

    }

    public void refresh1() {
        try{
         fact = query.isPeriodo_Autorizado(fecha.getCalendarioFacturacionPracticantesId());


         if(fact!=null){
             fac_Detalle1=query.getFactura_Detalle(fact.getPrefacturaId());
             Autorizada1=1;
             this.imp_rep1.setVisible(true);
         }else{
             this.imp_rep1.setVisible(false);
             Autorizada1=0;
         }

        }catch(Exception e){

        }

    }

    public void refresh2() {
        factura = query.isPeriodo_Autorizado(fecha2.getCalendarioFacturacionPracticantesId());
        try{
         if(factura!=null){
             fac_Detalle2=query.getFactura_Detalle(factura.getPrefacturaId());
             this.imp_rep2.setVisible(true);
             Autorizada1=1;
         }else{
             this.imp_rep2.setVisible(false);
             Autorizada2=0;
         }
        }catch(Exception e){

        }

    }

    public void refreshTabla() {
        try {
            factura2 = query.isPeriodo_AutorizadoQM(fecha.getCalendarioFacturacionPracticantesId(), fecha2.getCalendarioFacturacionPracticantesId());

            //periodo_actual();
            if (factura2 != null) {// si no es nula ,esta autorizada
                this.iva = factura2.getIva_factura();//obtiene el valor del iva con el que se facturo
                this.comision = factura2.getComision();//obtiene el valor de la comision con el que se facturo
                factura_DetalleQM = query.getFactura_DetalleQM(factura2.getPrefactura_qmId());//obtiene los registros cuando se autorizo
                this.vista.tabla_qm.setLista_Pract_AutorizadaQM(factura_DetalleQM);//los pinta en la tabla de practicantes
                this.vista.total_table.setLista_TotalesQM(factura2);// obtiene los totales y los pinta en la tabla totales

                this.vista.lb_convenio.setLabel_Txt("prefactura_convenios");
                this.vista.lb_estatus.setLabel_Txt("prefactura_estatus_ok");
                this.vista.lb_fechas.setLabel_Txt("prefactura_fecha_aut");
                this.vista.lb_usuario.setLabel_Txt("prefactura_usuario");

                this.vista.lb_convenio.setText(this.vista.lb_convenio.getText() + " " + factura_DetalleQM.size());//muestra la cantidad de registros
                this.vista.lb_fechas.setText(this.vista.lb_fechas.getText() + " " + formato.format(factura2.getFecha_aut()));//muestra la fecha de autorizacion
                this.vista.lb_usuario.setText(this.vista.lb_usuario.getText() + " " + factura2.getLogin());//usuario que autorizo
                tipo_proceso = 1;
                this.vista.botones.setVisible(true);
                this.vista.abono_adeudo.setVisible(false);
                permisos();

            } else {//si no esta autorizada
                this.iva = 16;//iva actual
                this.comision = empresa.getPorcentaje_comision();//comision para la empresa
                this.vista.lb_estatus.setLabel_Txt("prefactura_estatus_not_ok");//se muestra la etiqueta de prefactura no autorizada
                this.vista.lb_fechas.setLabel_Txt("prefactura_fecha_actual");//fecha actual
                this.vista.lb_fechas.setText(this.vista.lb_fechas.getText() + " " + formato.format(new Date()));
                this.vista.lb_convenio.setLabel_Txt("prefactura_convenios");

                    refresh1();
                    refresh2();
                    if(fact!=null && factura!=null){
                    this.vista.tabla_qm.setLista_PracticanteQM(fac_Detalle1, fac_Detalle2);//pinta los practicantes en la tabl
                    establecerMovimiento();
                    this.vista.total_table.setLista_TotalesQM(getTotalesQM(this.vista.tabla_qm.getMonto_a_pagar2(), this.vista.tabla_qm.getSeguro_empresaQM(), _abono, _adeudo));
                    _abono = 0.00;
                    _adeudo = 0.00;
                    //obtiene los totales
                    if(fac_Detalle1.size()>fac_Detalle2.size()){
                        this.vista.lb_convenio.setText(this.vista.lb_convenio.getText() + " " + fac_Detalle1.size());
                    }
                    if(fac_Detalle2.size()>fac_Detalle1.size()){
                        this.vista.lb_convenio.setText(this.vista.lb_convenio.getText() + " " + fac_Detalle2.size());
                    }
                    if(fac_Detalle2.size()==fac_Detalle1.size()){
                        this.vista.lb_convenio.setText(this.vista.lb_convenio.getText() + " " + fac_Detalle2.size());
                    }

                    this.vista.tabla_qm.getSelectionModel().clearSelection();
                    tipo_proceso = 2;
                    this.vista.botones.setVisible(true);
                    this.vista.abono_adeudo.setVisible(true);
                    permisos();
                } else {
                    this.vista.lb_convenio.setText(this.vista.lb_convenio.getText() + " 0");//no existen practicantes
                    this.vista.window_error.setVisible(true);
                    this.vista.add(this.vista.window_error);
                    this.vista.window_error.mensaje_Panel("Total disponible hasta autorizar ambos periodos");
                    //error("prefactura_sin_practicante");
                    this.vista.tabla_qm.getSelectionModel().clearSelection();//limpia la tabla de practicantes
                    this.vista.total_table.getSelectionModel().clearSelection();//limpia tabla totales
                    this.vista.tabla_qm.setModel(new DefaultTableModel());
                    this.vista.total_table.setModel(new DefaultTableModel());
                    tipo_proceso = 2;
                    this.vista.botones.setVisible(false);
                    this.vista.abono_adeudo.setVisible(false);
                    permisos();
                    return;

                }
            }
        } catch (Exception e) {
            error("lb_error_cargapagina");
            System.out.println(e.getMessage());
        }
    }

    public void establecerMovimiento() {
        AbonoQuery abc = new AbonoQuery();
        Double suma1, suma2;
        _adeudo = 0.0;
        _abono = 0.0;
        this.lista_mov = abc.getMovimiento(this.empresa.getEmpresaId(), this.fecha.getCalendarioFacturacionPracticantesId());
        for (int i = 0; i < lista_mov.size(); i++) {
            MovimientosCaintra mc = (MovimientosCaintra) lista_mov.get(i);
            if (mc.getIsAbono() == 0) {
                suma1 = mc.getCantidad();
                _adeudo += suma1;
            } else {
                suma2 = mc.getCantidad();
                _abono += suma2;
            }
        }


    }

    public PrefacturaQM getTotalesQM(double total_a_pagar, double seg_emp, double abono_empresa, double adeudo_empresa) {
        PrefacturaQM f;
        double sub_total_sinseguro = 0.0;
        double subtotal_c_seguro = 0.0;
        double iva_1 = 0.0;
        double total_1 = 0.0;
        double subtotal_c_abonos = 0.0;
        double iva_2 = 0.0;
        double total_final = 0.0;
        double g_adm = 0.0;
        f = new PrefacturaQM();
        try {
            f = new PrefacturaQM();
            g_adm = (total_a_pagar / 100) * this.comision;
            sub_total_sinseguro = total_a_pagar + g_adm;
            //ya se tiene el seguro de empresa
            subtotal_c_seguro = sub_total_sinseguro + seg_emp + adeudo_empresa;
            iva_1 = (subtotal_c_seguro / 100) * this.iva;
            total_1 = subtotal_c_seguro + iva_1;

            subtotal_c_abonos = subtotal_c_seguro - abono_empresa;
            iva_2 = (subtotal_c_abonos / 100) * this.iva;
            total_final = subtotal_c_abonos + iva_2;
            f.setSeguro_empresa(seg_emp);
            f.setMonto_a_pagar(total_a_pagar);
            f.setPorcentaje(empresa.getPorcentaje_comision());
            f.setGasto_adm(g_adm);

            f.setSubtotal_sin_seguro(sub_total_sinseguro);
            f.setAdeudos_empresa(adeudo_empresa);
            f.setSubtotal_conseguro(subtotal_c_seguro);
            f.setIva_1(iva_1);
            f.setTotal_1(total_1);
            f.setAbono_empresa(abono_empresa);
            f.setSubtotal_con_abono(subtotal_c_abonos);
            f.setIva_2(iva_2);
            f.setTotal_final(total_final);


        } catch (Exception e) {
            error("Fallo la Carga de los Totales");
        }
        return f;

    }

    public PrefacturaCaintra getTotales(double total_a_pagar, double seg_emp, double abono_empresa, double adeudo_empresa) {
        PrefacturaCaintra f;
        double sub_total_sinseguro = 0.0;
        double subtotal_c_seguro = 0.0;
        double iva_1 = 0.0;
        double total_1 = 0.0;
        double subtotal_c_abonos = 0.0;
        double iva_2 = 0.0;
        double total_final = 0.0;
        double g_adm = 0.0;
        f = new PrefacturaCaintra();
        try {
            f = new PrefacturaCaintra();
            g_adm = (total_a_pagar / 100) * this.comision;
            sub_total_sinseguro = total_a_pagar + g_adm;
            //ya se tiene el seguro de empresa
            subtotal_c_seguro = sub_total_sinseguro + seg_emp + adeudo_empresa;
            iva_1 = (subtotal_c_seguro / 100) * this.iva;
            total_1 = subtotal_c_seguro + iva_1;

            subtotal_c_abonos = subtotal_c_seguro - abono_empresa;
            iva_2 = (subtotal_c_abonos / 100) * this.iva;
            total_final = subtotal_c_abonos + iva_2;
            f.setSeguro_empresa(seg_emp);
            f.setMonto_a_pagar(total_a_pagar);
            f.setPorcentaje(empresa.getPorcentaje_comision());
            f.setGasto_adm(g_adm);

            f.setSubtotal_sin_seguro(sub_total_sinseguro);
            f.setAdeudos_empresa(adeudo_empresa);
            f.setSubtotal_conseguro(subtotal_c_seguro);
            f.setIva_1(iva_1);
            f.setTotal_1(total_1);
            f.setAbono_empresa(abono_empresa);
            f.setSubtotal_con_abono(subtotal_c_abonos);
            f.setIva_2(iva_2);
            f.setTotal_final(total_final);


        } catch (Exception e) {
            error("Fallo la Carga de los Totales");
        }
        return f;

    }

    public void imprimirJasper(int seleccion_reporte) {
        try {
            iniciarReporte rep = new iniciarReporte();
            String par = "" + this.fecha2.getCalendarioFacturacionPracticantesId();
            if (factura2 == null) {
                this.vista.total_table.getHeaderQM().setIva_factura(iva);
                this.vista.total_table.getHeaderQM().setRazon_empresa(empresa.getRazon_empresa());
                this.vista.total_table.getHeaderQM().setComision(comision);
                this.vista.total_table.getHeaderQM().setRfc(empresa.getRfc());
                this.vista.total_table.getHeaderQM().setRazon_social(empresa.getRazon_factura());
                this.vista.total_table.getHeaderQM().setPeriodo_1(fecha.toString());
                this.vista.total_table.getHeaderQM().setPeriodo_2(fecha2.toString());
                this.vista.total_table.getHeaderQM().setPeriodo1_id(fecha.getCalendarioFacturacionPracticantesId());
                this.vista.total_table.getHeaderQM().setPeriodo2_id(fecha2.getCalendarioFacturacionPracticantesId());
                int res = query.insert_Total_HeaderQM(this.vista.total_table.getHeaderQM(), fecha2.getCalendarioFacturacionPracticantesId(), usuario, 1);
                query.insertTotalesQM(this.vista.tabla_qm.getDetalle_prefacturaQM(), res);
                PrefacturaQM prf = query.isPeriodo_AutorizadoQM(fecha.getCalendarioFacturacionPracticantesId(), fecha2.getCalendarioFacturacionPracticantesId());
                List<PrefacturaDetalleQM> prf_det = query.getFactura_DetalleQM(prf.getPrefactura_qmId());
                if (seleccion_reporte == 0) {
                    rep.ejecutarReporte(par, seleccion_reporte, 1);
                } else {
                    ReporteExcel rep_ex = new ReporteExcel();
                    rep_ex.MenuCSV(prf_det, prf);
                }
                query.deletePeriodoFacturaQM(Integer.parseInt(par));
            } else {
                if (seleccion_reporte == 0) {
                    rep.ejecutarReporte(par, seleccion_reporte, 1);
                } else {
                    ReporteExcel rep_ex = new ReporteExcel();
                    rep_ex.MenuCSV(factura_DetalleQM, factura2);

                }
            }


        } catch (Exception e) {
            error("Fallo Al Cargar El Reporte");
        }
    }

    public void guardar_Cuenta() {
        String num_cuenta = "";
        long cuenta_lg = 0;
        boolean res = true;
        try {
            if (!this.vista.prac_tab.getSelectionModel().isSelectionEmpty()||!this.vista.prac_tab2.getSelectionModel().isSelectionEmpty()) {
                num_cuenta = this.vista.txt_cuenta.getText().trim();
                if (num_cuenta.equals("")) {
                    error("prefactura_cuenta_sincuenta");
                    return;
                }
                if (num_cuenta.length() != long_cuenta) {
                    error("Longitud de cuenta debe ser de " + long_cuenta + " caracteres");
                    return;
                }
                try {
                    cuenta_lg = Long.parseLong(num_cuenta);
                } catch (Exception e) {
                    error("prefactura_cuenta_num");
                    return;
                }
                List<BanorteCuentas> resp = query.getCuenta(1, num_cuenta);
                System.out.println(resp.size() + resp.toString());
                if (resp.size() > 0) {
                    error("la cuenta ya existe");
                    this.vista.txt_cuenta.setText("");
                    return;
                }

                if(per==1){
                seleccion_practicante1 = this.vista.prac_tab.getSelectionModel().getMinSelectedIndex();
                }

                if(per==2){
                seleccion_practicante2 = this.vista.prac_tab2.getSelectionModel().getMinSelectedIndex();
                }

                if(per==1){
                p_sel = (Practicante) Lista_Pantalla.get(seleccion_practicante1);
                Lista_Detalle = (ArrayList<Practicante>) Lista_Pract_Hm.get("pract_id_" + p_sel.getPracticanteId());
                res = query.actualizaCuenta(Lista_Detalle, num_cuenta);
                }
                if(per==2){
                    p_sel = (Practicante) Lista_Pantalla2.get(seleccion_practicante2);
                   Lista_Detalle2 = (ArrayList<Practicante>) Lista_Pract_Hm2.get("pract_id_" + p_sel.getPracticanteId());
                   res = query.actualizaCuenta(Lista_Detalle2, num_cuenta);
                }

                //res = query.actualizaCuenta(Lista_Detalle, num_cuenta);
                this.vista.window_error.setVisible(true);
                if (res) {
                    this.vista.window_error.mensaje_Panel("prefactura_cuenta_ok");
                } else {
                    this.vista.window_error.mensaje_Panel("prefactura_cuenta_ko");
                }
                this.vista.txt_cuenta.setText("");

                if(per==1){
                    establecerPer1();
                }
                if(per==2){
                establecerPer2();
                }
                refreshTabla();

            } else {
                error("prefactura_select_usuario");
            }
        } catch (Exception e) {
        }

    }

    public void autorizar(Calendariofacturacionpracticantes fec) {
        Calendar fecha_gap = Calendar.getInstance();
        Date dia_actual = new Date();
        try {


            fecha_gap.setTime(fec.getDia_gap());
            fecha_gap.add(Calendar.DATE, 1);
            if (this.vista.prac_tab.getBandera_negativo() == 1) {
                error("prefactura_negativo");
                return;
            }
            if (!usuario.getTipoUsuario().equals("A")) {
                if (dia_actual.getTime() > fecha_gap.getTime().getTime()) {
                    error("prefactura_gap");
                    return;
                }
            }

            if(per==1){
                Practicante p_aux;
            for(int i=0;i<Lista_Mayor.size();i++){
                p_aux=(Practicante)Lista_Mayor.get(i);
                if(p_aux.getFec_cancelacion() != null)
                    continue;

                long offset = fec.getDia_fin().getTime() - p_aux.getFec_terminoContrato().getTime();
                if(offset >= 0) {  // Si vence en este periodo y no es el ultimo dia
                    String msj="El practicante " + p_aux.getNombre() +" "+p_aux.getPaterno()+" "+p_aux.getMaterno()+
                    " vence en este periodo, por favor renueve su convenio o " +
                    "confirme la baja";
                    error(msj);
                    return;
                }

            }
            }

            if(per==2){
                Practicante p_aux;
            for(int i=0;i<Lista_Mayor2.size();i++){
                p_aux=(Practicante)Lista_Mayor2.get(i);
                if(p_aux.getFec_cancelacion() != null)
                    continue;

                long offset = fec.getDia_fin().getTime() - p_aux.getFec_terminoContrato().getTime();
                if(offset >= 0) {  // Si vence en este periodo y no es el ultimo dia
                    String msj="El practicante " + p_aux.getNombre() +" "+p_aux.getPaterno()+" "+p_aux.getMaterno()+
                    " vence en este periodo, por favor renueve su convenio o " +
                    "confirme la baja";
                    error(msj);
                    return;
                }

            }
            }

            this.vista.total_t.getHeader().setIva_factura(iva);
            this.vista.total_t.getHeader().setRazon_Empresa(empresa.getRazon_empresa());
            this.vista.total_t.getHeader().setComision(comision);
            this.vista.total_t.getHeader().setRfc(empresa.getRfc());
            this.vista.total_t.getHeader().setRazon_social(empresa.getRazon_factura());
            this.vista.total_t.getHeader().setPeriodo(fec.getDia_inicio(), fec.getDia_fin());
            int res = query.insert_Total_Header(this.vista.total_t.getHeader(), fec.getCalendarioFacturacionPracticantesId(), usuario, 1);
            if (res != -1) {
                int res2=0;
                if(this.per==1){
                res2 = query.insertTotales(this.vista.prac_tab.getDetalle_prefactura(), res);
                }

                 if(this.per==2){
                 res2 = query.insertTotales(this.vista.prac_tab2.getDetalle_prefactura(), res);
                }

                if (res2 == -1) {
                    query.deleteFactura(res);
                    error("prefactura_negativo");
                    return;
                } else {
                    this.vista.window_error.setVisible(true);
                    this.vista.window_error.mensaje_Panel("prefactura_ok");
                    this.vista.window_pref_per.setTitle("PERIODO AUTORIZADO");
                    query.updatePoliza(1, fec.getCalendarioFacturacionPracticantesId());
                    email.envioFactura_Caintra(fec, true, null);
                    if(per==1){
                        refresh1();
                    establecerPer1();
                    }
                    if(per==2){
                        refresh2();
                    establecerPer2();
                    }
                    refreshTabla();

                }
            } else {
                error("prefactura_error_guardado");
                return;
            }
        } catch (Exception e) {
            //error("prefactura_error_guardado");
            System.out.println(e.getMessage());
        }

    }



    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    public void autorizarQM() {
        Calendar fecha_gap = Calendar.getInstance();
        Date dia_actual = new Date();
        try {


            fecha_gap.setTime(fecha2.getDia_gap());
            fecha_gap.add(Calendar.DATE, 1);
            if (this.vista.tabla_qm.getBandera_negativo() == 1) {
                error("prefactura_negativo");
                return;
            }
            if (!usuario.getTipoUsuario().equals("A")) {
                if (dia_actual.getTime() > fecha_gap.getTime().getTime()) {
                    error("prefactura_gap");
                    return;
                }
            }

            this.vista.total_table.getHeaderQM().setIva_factura(iva);
            this.vista.total_table.getHeaderQM().setRazon_empresa(empresa.getRazon_empresa());
            this.vista.total_table.getHeaderQM().setComision(comision);
            this.vista.total_table.getHeaderQM().setRfc(empresa.getRfc());
            this.vista.total_table.getHeaderQM().setRazon_social(empresa.getRazon_factura());
            this.vista.total_table.getHeaderQM().setPeriodo_1(fecha.toString());
            this.vista.total_table.getHeaderQM().setPeriodo1_id(fecha.getCalendarioFacturacionPracticantesId());
            this.vista.total_table.getHeaderQM().setPeriodo_2(fecha2.toString());
            this.vista.total_table.getHeaderQM().setPeriodo2_id(fecha2.getCalendarioFacturacionPracticantesId());
            int res = query.insert_Total_HeaderQM(this.vista.total_table.getHeaderQM(), fecha2.getCalendarioFacturacionPracticantesId(), usuario, 1);
            if (res != -1) {
                int res2 = query.insertTotalesQM(this.vista.tabla_qm.getDetalle_prefacturaQM(), res);

                if (res2 == -1) {
                    query.deletePeriodoFacturaQM(res);
                    error("prefactura_negativo");
                    return;
                } else {
                    this.vista.window_error.setVisible(true);
                    this.vista.window_error.mensaje_Panel("prefactura_ok");
                    query.updatePoliza(1, fecha2.getCalendarioFacturacionPracticantesId());
                    email.envioFactura_Caintra(fecha2, true, null);
                    refreshTabla();
                }

            } else {
                error("prefactura_error_guardado");
                return;
            }
        } catch (Exception e) {
            error("prefactura_error_guardado");
        }
    }

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    public void cancelar(PrefacturaCaintra fc, Calendariofacturacionpracticantes f) {
        try {
            Date dia_actual = new Date();
            String fecha_str = "";

            fecha_str = formato.format(dia_actual);//obtiene la fecha actual y la convierte a String
            dia_actual = formato.parse(fecha_str);

            if(factura2!=null){
                error("AVISO, Primero cancelar prefactura mensual");
                return;
             }

            if(per==1){
                if(factura!=null){
                    error("AVISO, primero cancelar segundo periodo");
                    return;

                }
               /* if(dia_actual.getTime()>=f.getDia_dispersion().getTime()){
                    error("AVISO, fecha fuera de límite para cancelacion ");
                    return;

                }*/


            }


            email.envioFactura_Caintra(f, false, usuario);
            query.deleteFactura(fc.getPrefacturaId());
            this.vista.window_error.setVisible(true);
            this.vista.window_error.mensaje_Panel("prefactura_cancel");
            this.vista.window_pref_per.setTitle("PERIODO:" + f.toString());
            query.updatePoliza(0, f.getCalendarioFacturacionPracticantesId());

            if(per==1){
                refresh1();
           ///establecerRetroactivo(Lista_Pantalla, Lista_Pantalla2);
            establecerPer1();
            establecerPer2();
            }
            if(per==2){
                refresh2();

            establecerPer2();
            }
            refreshTabla();
        } catch (Exception e) {
            //error("Error Al Cancelar Prefactura" + e.getMessage());

        }
    }

    public void cancelarQM(Calendariofacturacionpracticantes fechas) {
        try {
            email.envioFactura_Caintra(fechas, false, usuario);
            boolean res1 = query.deleteDetalleQM(factura2.getPrefactura_qmId());
            if (res1 == true) {
                query.deletePeriodoFacturaQM(fechas.getCalendarioFacturacionPracticantesId());
            } else {
                this.vista.window_error.setVisible(true);
                this.vista.window_error.mensaje_Panel("prefactura_cancel");
            }
            this.vista.window_error.setVisible(true);
            this.vista.window_error.mensaje_Panel("prefactura_cancel");
            query.updatePoliza(0, fechas.getCalendarioFacturacionPracticantesId());
            refreshTabla();
        } catch (Exception e) {
            error("Error Al Cancelar Prefactura" + e.getMessage());

        }
    }

    public void periodo_actual1() throws ParseException{
        Calendariofacturacionpracticantes periodo1, periodo2;
        Date dia_actual = new Date();
        String fecha_str = "";
        fecha_str=formato.format(dia_actual);
        dia_actual=formato.parse(fecha_str);
        String fecha_str1="";
        String fecha_str2="";

        int bandera = -1;
        try{
            for(int i=0;i<lista_periodo.size(); i++){

                fecha_str1=formato2.format(lista_periodo.get(i).getDia_fin());
                fecha_str2=formato2.format(lista_periodo.get(i+1).getDia_fin());

                if(Integer.parseInt(fecha_str1)==15
                        && (Integer.parseInt(fecha_str2)==28 ||Integer.parseInt(fecha_str2)==30
                        || Integer.parseInt(fecha_str2)==31)){

                    periodo1=lista_periodo.get(i);
                    periodo2=lista_periodo.get(i+1);

                    if(dia_actual.getTime()<periodo1.getDia_fin().getTime()||dia_actual.getTime()<periodo2.getDia_fin().getTime()){

                        fecha=periodo1;
                        fecha2=periodo2;

                        this.vista.sel_periodos.setSelectedItem(fecha);
                        this.vista.sel_periodo2.setSelectedItem(fecha2);

                        refreshTabla();
                        bandera=1;
                        break;
                    }

                }



            }


            if (bandera == -1) {
                error("lb_error_periodo");
            }
        } catch (Exception e) {
            error("lb_error_cargapagina");
        }
    }


    public void establecerPerfecha2(int num){

        for(int i=0;i<lista_periodo.size();i++){
            if(lista_periodo.get(i).getCalendarioFacturacionPracticantesId()==num){
                fecha=lista_periodo.get(i);
            }

        }
        this.vista.sel_periodos.setSelectedItem(fecha);
        Action_selectPeriodo2();
        this.vista.sel_periodo2.setSelectedItem(fecha2);


    }




    public void Action_selectEmpresa() {

        try {
            lista_periodo =query.getPeriodos(empresa.getEmpresaId());//obtiene todos los periodos correspondientes
            if (lista_periodo != null || !lista_periodo.isEmpty()) {
                this.vista.sel_periodos.Modelo_Periodo(lista_periodo);// se agregan los periodos al componente selectField
                this.vista.sel_periodo2.Modelo_Periodo(lista_periodo);
                periodo_actual1();
                //periodo_actual2();//manda llamar al metodo para buscar el periodo actual
            } else {
                error("lb_error_periodo");
                return;
            }


        } catch (Exception e) {
            error("lb_error_cargapagina");
            return;
        }

    }



    public void Action_selectPeriodo() {
        try {
            fecha = (Calendariofacturacionpracticantes) this.vista.sel_periodos.getSelectedItem();
            Action_selectPeriodo2();
            refresh1();
            refresh2();
            refreshTabla();
        } catch (Exception e) {
            error("Error al seleccionar periodo");
        }

    }


    public void Action_selectPeriodo2() {
        try {
            Calendariofacturacionpracticantes fec=new Calendariofacturacionpracticantes();
            for(int i=0; i<this.lista_periodo.size();i++){
                if(lista_periodo.get(i).getCalendarioFacturacionPracticantesId()==fecha.getCalendarioFacturacionPracticantesId()){
                    fec=lista_periodo.get(i+1);
                }

            }
            fecha2 = fec;
            refresh1();
            refresh2();
            refreshTabla();
        } catch (Exception e) {
            error("Error al seleccionar periodo");
        }

    }

    public void Action_selectTable() {
        try {
            if (!this.vista.prac_tab.getSelectionModel().isSelectionEmpty()) {
                if (Autorizada1==1) {
                    p_sel = (Practicante) Lista_Pantalla.get(seleccion_practicante1);
                    this.vista.window_decision.setContentPane(new DecisionPane(this));
                }
                if (Autorizada1==0) {
                    seleccion_practicante1 = this.vista.prac_tab.getSelectionModel().getMinSelectedIndex();
                    p_sel = (Practicante) Lista_Pantalla.get(seleccion_practicante1);
                    Lista_Detalle = (ArrayList<Practicante>) Lista_Pract_Hm.get("pract_id_" + p_sel.getPracticanteId());
                    this.vista.window_decision.setContentPane(new DecisionPane(this));
                    this.vista.window_pref_per.setEnabled(false);
                    this.vista.window_pref_per.setVisible(false);
                }

            }
        } catch (Exception e) {
            error("Error al seleccionar tabla");
        }
    }

    public void Action_selectTable2() {
        try {
            if (!this.vista.prac_tab2.getSelectionModel().isSelectionEmpty()) {

                    if (Autorizada2==1) {
                    p_sel = (Practicante) Lista_Pantalla2.get(seleccion_practicante2);
                    this.vista.window_decision.setContentPane(new DecisionPane(this));
                }
                if (Autorizada2==0) {
                    seleccion_practicante2 = this.vista.prac_tab2.getSelectionModel().getMinSelectedIndex();
                    p_sel = (Practicante) Lista_Pantalla2.get(seleccion_practicante2);
                    Lista_Detalle2 = (ArrayList<Practicante>) Lista_Pract_Hm2.get("pract_id_" + p_sel.getPracticanteId());
                    this.vista.window_decision.setContentPane(new DecisionPane(this));
                    this.vista.window_pref_per.setEnabled(false);
                    this.vista.window_pref_per.setVisible(false);
                }

            }
        } catch (Exception e) {
            error("Error al seleccionar tabla");
        }
    }

    public void group_By_Practicante() {
        Lista_Pract_Hm = new HashMap();
        String param_id = "pract_id_";
        int longitud = 0;

        Practicante p1, p2;
        int dias = 0;

        try {
            Lista_Pantalla = new ArrayList<Practicante>();
            Lista_Detalle = new ArrayList<Practicante>();
            longitud = Lista_Mayor.size();
            if (!(longitud <= 0)) {
                if (longitud == 1) {
                    p1 = (Practicante) Lista_Mayor.get(0);
                    //dias=dias_a_pagar(p1, fecha);
                    p1.obtener_fechas();
                    p1.setLista_dias(eliminaDia31(p1.getLista_dias()));
                    p1.setDias(p1.getLista_dias().size() + ultimoDiaMes(p1.getLista_dias()), fecha.getDias_a_pagar_periodo());
                    Lista_Pantalla.add(p1);
                    Lista_Detalle.add(p1);
                    Lista_Pract_Hm.put(param_id + "" + p1.getPracticanteId(), Lista_Detalle);
                    Lista_Mayor.remove(p1);
                } else {
                    int i = 0;
                    int j = 0;
                    Practicante p_pantalla;
                    for (i = 0; i < longitud; i++) {
                        double aux_SeguroEmpresa = 0;
                        double aux_SeguroPracticante = 0;
                        double aux_AjusteMonto = 0;
                        double aux_DeduccionMonto = 0;
                        int aux_AjusteDia = 0;
                        int aux_DeduccionDia = 0;


                        p1 = (Practicante) Lista_Mayor.get(i);
                        Lista_Detalle = new ArrayList<Practicante>();
                        p1.setDias(p1.obtener_fechas().size() + ultimoDiaMes(p1.getLista_dias()), fecha.getDias_a_pagar_periodo());


                        aux_SeguroEmpresa = p1.getSeguroEmpresa();//setea la cantidad de seguro empresa
                        aux_SeguroPracticante = p1.getSeguroPracticante();//setea la cantidad de seguro empresa
                        aux_AjusteMonto = p1.getAjustemonto();//setea la cantidad de seguro empresa
                        aux_DeduccionMonto = p1.getDeduccionmonto();//setea la cantidad de seguro empresa
                        aux_AjusteDia = p1.getAjustedia();//setea la cantidad de seguro empresa
                        aux_DeduccionDia = p1.getDeducciondia();//setea la cantidad de seguro empresa

                        p_pantalla = new Practicante();
                        p_pantalla.setPracticanteId(p1.getPracticanteId());
                        p_pantalla.setNombre(p1.getNombre());
                        p_pantalla.setPaterno(p1.getPaterno());
                        p_pantalla.setMaterno(p1.getMaterno());
                        p_pantalla.setCentrocosto(p1.getCentrocosto());
                        p_pantalla.setFec_inicioContrato(p1.getFec_inicioContrato());
                        p_pantalla.setFec_terminoContrato(p1.getFec_terminoContrato());
                        p_pantalla.setFec_cancelacion(p1.getFec_cancelacion());
                        p_pantalla.setSueldo(p1.getSueldo());
                        p_pantalla.setLista_dias(p1.obtener_fechas());
                        p_pantalla.setCuenta(p1.getCuenta());
                        p_pantalla.setLista_dias(eliminaDia31(p_pantalla.getLista_dias()));

                        p_pantalla.setDepartamento(p1.getDepartamento());
                        p_pantalla.setFec_cancelacion(p1.getFec_cancelacion());
                        Lista_Detalle.add(p1);
                        for (j = i + 1; j < longitud; j++) {
                            p2 = (Practicante) Lista_Mayor.get(j);


                            if (p_pantalla.getNombre().equals(p2.getNombre())
                                    && p_pantalla.getPaterno().equals(p2.getPaterno())
                                    && p_pantalla.getMaterno().equals(p2.getMaterno())) {

                                Lista_Detalle.add(p2);
                                /*
                                if(p_pantalla.getFec_inicioContrato().getTime() > p2.getFec_inicioContrato().getTime()){
                                p_pantalla.setFec_inicioContrato(p2.getFec_inicioContrato());
                                }
                                if(p_pantalla.getFec_terminoContrato().getTime() < p2.getFec_terminoContrato().getTime()){
                                p_pantalla.setFec_terminoContrato(p2.getFec_terminoContrato());
                                }*/
                                if (p2.getPracticanteId() > p_pantalla.getPracticanteId()) {
                                    p_pantalla.setFec_inicioContrato(p2.getFec_inicioContrato());
                                    p_pantalla.setFec_terminoContrato(p2.getFec_terminoContrato());

                                    p_pantalla.setSueldo(p2.getSueldo());
                                }
                                aux_SeguroEmpresa += p2.getSeguroEmpresa();
                                aux_SeguroPracticante += p2.getSeguroPracticante();
                                aux_AjusteMonto += p2.getAjustemonto();
                                aux_DeduccionMonto += p2.getDeduccionmonto();
                                aux_AjusteDia += p2.getAjustedia();
                                aux_DeduccionDia += p2.getDeducciondia();
                                p_pantalla.setDepartamento(p2.getDepartamento());
                                p2.obtener_fechas();
                                p2.setLista_dias(eliminaDia31(p2.getLista_dias()));
                                p2.setDias(p2.getLista_dias().size() + ultimoDiaMes(p2.getLista_dias()), fecha.getDias_a_pagar_periodo());

                                p_pantalla.setLista_dias(compara_fecha(p_pantalla.getLista_dias(), p2.obtener_fechas()));

                                if (p_pantalla.getFec_cancelacion() != null) {
                                    if (p2.getFec_cancelacion() == null) {
                                        p_pantalla.setFec_cancelacion(null);
                                    } else {
                                        if (p2.getFec_cancelacion().getTime() > p_pantalla.getFec_cancelacion().getTime()) {
                                            p_pantalla.setFec_cancelacion(p2.getFec_cancelacion());
                                        }

                                    }
                                }


                            } else {
                                break;
                            }

                        }

                        p_pantalla.setSeguroEmpresa(aux_SeguroEmpresa);
                        p_pantalla.setSeguroPracticante(aux_SeguroPracticante);
                        p_pantalla.setAjustemonto(aux_AjusteMonto);
                        p_pantalla.setDeduccionmonto(aux_DeduccionMonto);
                        p_pantalla.setAjustedia(aux_AjusteDia);
                        p_pantalla.setDeducciondia(aux_DeduccionDia);

                        p_pantalla.getLista_dias().size();
                        p_pantalla.setDias(p_pantalla.getLista_dias().size() + ultimoDiaMes(p_pantalla.getLista_dias()), fecha.getDias_a_pagar_periodo());





                        Lista_Pract_Hm.put(param_id + "" + p1.getPracticanteId(), Lista_Detalle);
                        i = j - 1;
                        Lista_Pantalla.add(p_pantalla);

                    }
                }
            }


        } catch (Exception e) {
            error("Error al agrupar los practicantes");
        }

    }

    public void group_By_PracticanteQM() {
        Lista_Pract_Hm2=new HashMap();
        String param_id="pract_id_";
        int longitud=0;

        Practicante p1,p2;
        int dias=0;

        try {
            Lista_Pantalla2=new ArrayList<Practicante>();
            Lista_Detalle2=new ArrayList<Practicante>();
            longitud=Lista_Mayor2.size();
            if(!(longitud <= 0)){
                if(longitud == 1){
                    p1=(Practicante)Lista_Mayor2.get(0);
                    //dias=dias_a_pagar(p1, fecha);
                    p1.obtener_fechas();
                    p1.setLista_dias(eliminaDia31_2(p1.getLista_dias()));
                    p1.setDias(p1.getLista_dias().size()+ultimoDiaMes_2(p1.getLista_dias()), fecha2.getDias_a_pagar_periodo());
                    Lista_Pantalla2.add(p1);
                    Lista_Detalle2.add(p1);
                    Lista_Pract_Hm2.put(param_id+""+p1.getPracticanteId(), Lista_Detalle2);
                    Lista_Mayor2.remove(p1);
                }else{
                        int i=0;
                        int j=0;
                        Practicante p_pantalla;
                        for(i=0;i<longitud;i++){
                                double aux_SeguroEmpresa=0;
                                double aux_SeguroPracticante=0;
                                double aux_AjusteMonto=0;
                                double aux_DeduccionMonto=0;
                                int aux_AjusteDia=0;
                                int aux_DeduccionDia=0;


                                p1=(Practicante)Lista_Mayor2.get(i);
                                Lista_Detalle2=new ArrayList<Practicante>();
                                p1.setDias(p1.obtener_fechas().size()+ultimoDiaMes_2(p1.getLista_dias()), fecha2.getDias_a_pagar_periodo());


                                aux_SeguroEmpresa=p1.getSeguroEmpresa();//setea la cantidad de seguro empresa
                                aux_SeguroPracticante=p1.getSeguroPracticante();//setea la cantidad de seguro empresa
                                aux_AjusteMonto=p1.getAjustemonto();//setea la cantidad de seguro empresa
                                aux_DeduccionMonto=p1.getDeduccionmonto();//setea la cantidad de seguro empresa
                                aux_AjusteDia=p1.getAjustedia();//setea la cantidad de seguro empresa
                                aux_DeduccionDia=p1.getDeducciondia();//setea la cantidad de seguro empresa

                                p_pantalla=new Practicante();
                                p_pantalla.setPracticanteId(p1.getPracticanteId());
                                p_pantalla.setNombre(p1.getNombre());
                                p_pantalla.setPaterno(p1.getPaterno());
                                p_pantalla.setMaterno(p1.getMaterno());
                                p_pantalla.setCentrocosto(p1.getCentrocosto());
                                p_pantalla.setFec_inicioContrato(p1.getFec_inicioContrato());
                                p_pantalla.setFec_terminoContrato(p1.getFec_terminoContrato());
                                p_pantalla.setFec_cancelacion(p1.getFec_cancelacion());
                                p_pantalla.setSueldo(p1.getSueldo());
                                p_pantalla.setLista_dias(p1.obtener_fechas());
                                p_pantalla.setCuenta(p1.getCuenta());
                                p_pantalla.setLista_dias(eliminaDia31_2(p_pantalla.getLista_dias()));
                                p_pantalla.setFec_nacimiento(p1.getFec_nacimiento());
                                p_pantalla.setDepartamento(p1.getDepartamento());
                                p_pantalla.setFec_cancelacion(p1.getFec_cancelacion());
                                ArrayList<String> list=p_pantalla.getLista_dias();
                                Lista_Detalle2.add(p1);
                                for(j=i+1;j<longitud;j++){
                                        p2=(Practicante)Lista_Mayor2.get(j);


                                        if(p_pantalla.getNombre().equals(p2.getNombre())
                                                && p_pantalla.getPaterno().equals(p2.getPaterno())
                                                && p_pantalla.getMaterno().equals(p2.getMaterno())){

                                                Lista_Detalle2.add(p2);
                                                /*
                                                if(p_pantalla.getFec_inicioContrato().getTime() > p2.getFec_inicioContrato().getTime()){
                                                      p_pantalla.setFec_inicioContrato(p2.getFec_inicioContrato());
                                                }
                                                if(p_pantalla.getFec_terminoContrato().getTime() < p2.getFec_terminoContrato().getTime()){
                                                      p_pantalla.setFec_terminoContrato(p2.getFec_terminoContrato());
                                                }*/
                                                if(p2.getPracticanteId()>p_pantalla.getPracticanteId()){
                                                    p_pantalla.setFec_inicioContrato(p2.getFec_inicioContrato());
                                                    p_pantalla.setFec_terminoContrato(p2.getFec_terminoContrato());
                                                    //aux_SeguroEmpresa=p2.getSeguroEmpresa();
                                                    //aux_SeguroPracticante=p2.getSeguroPracticante();
                                                    p_pantalla.setSueldo(p2.getSueldo());
                                                }else{

                                                }
                                                aux_SeguroEmpresa += p2.getSeguroEmpresa();
                                                aux_SeguroPracticante += p2.getSeguroPracticante();
                                                aux_AjusteMonto += p2.getAjustemonto();
                                                aux_DeduccionMonto += p2.getDeduccionmonto();
                                                aux_AjusteDia += p2.getAjustedia();
                                                aux_DeduccionDia += p2.getDeducciondia();
                                                p_pantalla.setDepartamento(p2.getDepartamento());
                                                p2.obtener_fechas();
                                                p2.setLista_dias(eliminaDia31_2(p2.getLista_dias()));
                                                p2.setDias(p2.getLista_dias().size()+ultimoDiaMes_2(p2.getLista_dias()), fecha2.getDias_a_pagar_periodo());

                                                /*p_pantalla.setLista_dias(compara_fecha(p_pantalla.getLista_dias(), p2.obtener_fechas(),fecha2));
                                                p_pantalla.setLista_dias(p2.getLista_dias());*/
                                                p_pantalla.setLista_dias(compara_fecha_2(list, p2.obtener_fechas()));

                                                if(p_pantalla.getFec_cancelacion() != null){
                                                    if(p2.getFec_cancelacion() == null){
                                                            p_pantalla.setFec_cancelacion(null);
                                                    }else{
                                                        if(p2.getFec_cancelacion().getTime()>p_pantalla.getFec_cancelacion().getTime()){
                                                             p_pantalla.setFec_cancelacion(p2.getFec_cancelacion());
                                                        }

                                                    }
                                                }


                                        }else{
                                                break;
                                        }

                                }

                                p_pantalla.setSeguroEmpresa(aux_SeguroEmpresa);
                                p_pantalla.setSeguroPracticante(aux_SeguroPracticante);
                                p_pantalla.setAjustemonto(aux_AjusteMonto);
                                p_pantalla.setDeduccionmonto(aux_DeduccionMonto);
                                p_pantalla.setAjustedia(aux_AjusteDia);
                                p_pantalla.setDeducciondia(aux_DeduccionDia);

                                p_pantalla.getLista_dias().size();
                                p_pantalla.setDias(p_pantalla.getLista_dias().size()+ultimoDiaMes_2(p_pantalla.getLista_dias()), fecha2.getDias_a_pagar_periodo());





                                Lista_Pract_Hm2.put(param_id+""+p1.getPracticanteId(), Lista_Detalle2);
                                i=j-1;
                                Lista_Pantalla2.add(p_pantalla);

                        }
                    }
            }


        } catch (Exception e) {
            error("Error al agrupar los practicantes");
        }


    }

    public int ultimoDiaMes(ArrayList<String> lista_fecha) {
        String fecha_mes = "";
        String fecha_lista = "";
        int dia_ultimo = 0;
        int suma_dia = 0;
        try {
            Calendar c = Calendar.getInstance();
            Calendar otro = Calendar.getInstance();
            otro.setTime(fecha.getDia_fin());

            if (fecha.getDias_a_pagar_periodo() != 14) {
                c.setTime(fecha.getDia_fin());
                if (Calendar.FEBRUARY == c.get(Calendar.MONTH)) {
                    dia_ultimo = c.getActualMaximum(Calendar.DAY_OF_MONTH);//obtiene el ultimo dia del mes de la fecha final de prefactura
                    otro.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));//ultimo dia de mes
                    fecha_mes = formato.format(otro.getTime());//obtiene String de Fecha fin de mes


                    for (int i = 0; i < lista_fecha.size(); i++) {
                        fecha_lista = (String) lista_fecha.get(i);
                        if (fecha_lista.equals(fecha_mes)) {
                            if (dia_ultimo == 29) {
                                suma_dia = 1;
                            }
                            if (dia_ultimo == 28) {
                                suma_dia = 2;
                            }
                            break;
                        }
                    }

                }
            }



        } catch (Exception e) {
            return 0;
        }
        return suma_dia;
    }

    public ArrayList<String> eliminaDia31(ArrayList<String> lista) {// solo para las que no son catorcenales
        String fecha_aux;
        String[] destajo_fecha;
        try {
            for (int i = 0; i < lista.size(); i++) {
                fecha_aux = (String) lista.get(i);
                destajo_fecha = fecha_aux.split("-");
                if ((fecha.getDias_a_pagar_periodo() != 14) && destajo_fecha[2].equals("31")) {
                    lista.remove(i);
                    i--;
                }
            }
        } catch (Exception e) {
            return null;
        }
        return lista;

    }

    public ArrayList<String> compara_fecha(ArrayList<String> lista_p1,ArrayList<String> lista_p2){
       String fecha_1;
       String fecha_2;
       String[] destajo_fecha;


       try {
           for(int i=0;i<lista_p1.size();i++){
                fecha_1 = (String)lista_p1.get(i);
                destajo_fecha=fecha_1.split("-");

                if((fecha.getDias_a_pagar_periodo() != 14) && destajo_fecha[2].equals("31")){
                        lista_p1.remove(i);
                        i--;
                }else{
                        for(int j=0;j < lista_p2.size();j++){
                            fecha_2 = (String)lista_p2.get(j);
                            destajo_fecha=fecha_2.split("-");

                            if(fecha_1.equals(fecha_2)){
                                        lista_p2.remove(j);
                                        j--;
                             }




                        }
                }



           }
        lista_p1.addAll(lista_p2);


       } catch (Exception e) {
           return null;
       }
       return lista_p1;
   }
    /////////////////////////////////////////////////////////////////////////////////////
    public int ultimoDiaMes_2(ArrayList<String> lista_fecha){
        String fecha_mes="";
        String fecha_lista="";
        int dia_ultimo=0;
        int suma_dia=0;
        try {
           Calendar c=Calendar.getInstance();
           Calendar otro=Calendar.getInstance();
           otro.setTime(fecha2.getDia_fin());

           if(fecha2.getDias_a_pagar_periodo() != 14){
                c.setTime(fecha2.getDia_fin());
                if(Calendar.FEBRUARY == c.get(Calendar.MONTH)){
                        dia_ultimo=c.getActualMaximum(Calendar.DAY_OF_MONTH);//obtiene el ultimo dia del mes de la fecha final de prefactura
                        otro.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));//ultimo dia de mes
                        fecha_mes=formato.format(otro.getTime());//obtiene String de Fecha fin de mes


                        for(int i=0;i<lista_fecha.size();i++){
                            fecha_lista=(String)lista_fecha.get(i);
                            if(fecha_lista.equals(fecha_mes)){
                                if(dia_ultimo == 29) suma_dia=1;
                                if(dia_ultimo == 28) suma_dia=2;
                                break;
                            }
                        }

                }
           }



       } catch (Exception e) {
            return 0;
       }
        return suma_dia;
   }

    public ArrayList<String> eliminaDia31_2(ArrayList<String> lista){// solo para las que no son catorcenales
        String fecha_aux;
        String[] destajo_fecha;
        try {
             for(int i=0;i<lista.size();i++){
                  fecha_aux = (String)lista.get(i);
                  destajo_fecha=fecha_aux.split("-");
                  if((fecha2.getDias_a_pagar_periodo() != 14) && destajo_fecha[2].equals("31")){
                        lista.remove(i);
                        i--;
                  }
             }
        } catch (Exception e) {
            return null;
        }
        return lista;

    }
    public ArrayList<String> compara_fecha_2(ArrayList<String> lista_p1,ArrayList<String> lista_p2){
       String fecha_1;
       String fecha_2;
       String[] destajo_fecha;


       try {
           for(int i=0;i<lista_p1.size();i++){
                fecha_1 = (String)lista_p1.get(i);
                destajo_fecha=fecha_1.split("-");

                if((fecha2.getDias_a_pagar_periodo() != 14) && destajo_fecha[2].equals("31")){
                        lista_p1.remove(i);
                        i--;
                }else{
                        for(int j=0;j < lista_p2.size();j++){
                            fecha_2 = (String)lista_p2.get(j);
                            destajo_fecha=fecha_2.split("-");

                            if(fecha_1.equals(fecha_2)){
                                        lista_p2.remove(j);
                                        j--;
                             }




                        }
                }



           }
        lista_p1.addAll(lista_p2);


       } catch (Exception e) {
           return null;
       }
       return lista_p1;
   }


    public void abono_adeudo() {
        try {
            this.vista.window_abono.setVisible(true);
            this.vista.window_abono.setModal(true);
            this.vista.window_abono.setTitle("Movimientos de empresa");
            this.vista.window_abono.setClosable(false);

            this.vista.window_abono.setContentPane(new AbonoView(this));
        } catch (Exception e) {
            error("lb_error_cargapagina");
        }

    }

    public void Action_seguro1() {
        try {
            if (!this.vista.prac_tab.getSelectionModel().isSelectionEmpty()) {
                try {
                    int index = vista.prac_tab.getSelectionModel().getMinSelectedIndex();
                    boolean res1;
                    Practicante p = new Practicante();

                    if (index >= 0) {
                        p = (Practicante) Lista_Pantalla.get(index);
                    } else {
                        return;
                    }
                    if (p.getSeguroEmpresa() > 0 || p.getSeguroPracticante() != 0) {
                        int res = dPracticante.UpdateSeguro(p.getPracticanteId(), true, this.fecha.getCalendarioFacturacionPracticantesId());
                        if (res >= 0) {
                            error("Seguro Eliminado correctamente");
                        } else {
                            error("Error en cobro de seguro");
                        }
                    } else {
                        int res = dPracticante.UpdateSeguro(p.getPracticanteId(), false, this.fecha.getCalendarioFacturacionPracticantesId());
                        if (res >= 0) {
                            error("Seguro agregado correctamente");
                        } else {
                            error("Error en la eliminacion de seguro");
                        }

                    }
                } catch (Exception exc) {
                } finally {
                    seleccion_practicante1 = -1;
                    this.vista.prac_tab.getSelectionModel().clearSelection();
                }
            } else {
                error("prefactura_select_usuario");
            }

        } catch (Exception e) {
        } finally {
            establecerPer1();
        }
    }

    public void Action_seguro2() {
        try {
            if (!this.vista.prac_tab2.getSelectionModel().isSelectionEmpty()) {
                try {
                    int index = vista.prac_tab2.getSelectionModel().getMinSelectedIndex();
                    boolean res1;
                    Practicante p = new Practicante();

                    if (index >= 0) {
                        p = (Practicante) Lista_Pantalla2.get(index);
                    } else {
                        return;
                    }
                    if (p.getSeguroEmpresa() > 0 || p.getSeguroPracticante() != 0) {
                        int res = dPracticante.UpdateSeguro(p.getPracticanteId(), true, this.fecha2.getCalendarioFacturacionPracticantesId());
                        if (res >= 0) {
                            error("Seguro Eliminado correctamente");
                        } else {
                            error("Error en cobro de seguro");
                        }
                    } else {
                        int res = dPracticante.UpdateSeguro(p.getPracticanteId(), false, this.fecha2.getCalendarioFacturacionPracticantesId());
                        if (res >= 0) {
                            error("Seguro agregado correctamente");
                        } else {
                            error("Error en la eliminacion de seguro");
                        }

                    }
                } catch (Exception exc) {
                } finally {
                    seleccion_practicante2 = -1;
                    this.vista.prac_tab2.getSelectionModel().clearSelection();
                }
            } else {
                error("prefactura_select_usuario");
            }

        } catch (Exception e) {
        } finally {
            establecerPer2();
        }
    }

    public void establecerPer1(){
                ContentPane cp = new ContentPane();
                Column cl = new Column();
                r1=new Row();
                autp1 = new BotonCaintra("AUTORIZAR", 100, "per1");
                cancelar = new BotonCaintra("CANCELAR", 100, "can");
                imp_rep1 = new BotonCaintra("IMPRIMIR REPORTE", 100, "rep1");
                seg1 = new BotonCaintra("SEGURO", 100, "seg1");
                autp1.addActionListener(this);
                cancelar.addActionListener(this);
                imp_rep1.addActionListener(this);
                seg1.addActionListener(this);
                per=1;
                r1.add(seg1);
                this.vista.lb_cuenta.setVisible(true);
                this.vista.txt_cuenta.setVisible(true);
                this.vista.ok_cuenta.setVisible(true);
                this.vista.movimientos.setVisible(true);
                r1.add(this.vista.lb_cuenta);
                r1.add(this.vista.txt_cuenta);
                r1.add(this.vista.ok_cuenta);
                r1.add(this.vista.movimientos);
                cl.add(r1);
                cl.add(this.vista.prac_tab);
                cl.add(this.vista.total_t);
                cl.add(autp1);
                cl.add(cancelar);
                cl.add(imp_rep1);
                cl.setInsets(new Insets(20, 20, 0, 0));
                cp.add(cl);
                this.vista.window_pref_per.setContentPane(cp);
                this.vista.window_pref_per.setWidth(new Extent(1300));
                this.vista.window_pref_per.setHeight(new Extent(500));
                refresh1();
                if (fact != null && fac_Detalle1!=null) {
                    this.vista.prac_tab.setLista_Pract_Autorizada(fac_Detalle1);
                    this.vista.total_t.setLista_Total_Autorizada(fact);
                    this.vista.window_pref_per.setTitle("PERIODO AUTORIZADO");
                    r1.setVisible(false);
                    cancelar.setVisible(true);
                    autp1.setVisible(false);
                    imp_rep1.setVisible(true);

                } else {
                    Lista_Mayor=query.getFactura_Practicante(fecha);
                    if(!Lista_Mayor.isEmpty()&&Lista_Mayor!=null){
                        group_By_Practicante();
                        establecerRetroactivo(Lista_Pantalla);
                        this.vista.prac_tab.setLista_Practicante(Lista_Pantalla);
                    this.vista.total_t.setLista_Totales(getTotales(this.vista.prac_tab.getMonto_a_pagar(), this.vista.prac_tab.getSeguro_empresa(), _abono, _adeudo));
                    r1.setVisible(true);
                    cancelar.setVisible(false);
                    autp1.setVisible(true);
                    imp_rep1.setVisible(false);
                    this.vista.window_pref_per.setTitle("PERIODO:" + fecha.toString());
                    this.vista.prac_tab.getSelectionModel().clearSelection();
                    }else{
                         this.vista.window_error.mensaje_Panel("prefactura_sin_practicante");
                         //return;
                    }
                }
    }

    public boolean rev_autorizacion(){
        boolean rez=false;
        if(fact==null&&factura==null){
            rez=true;
        }
        return rez;
    }

    public void establecerPer2(){
        ContentPane cp = new ContentPane();
                Column cl = new Column();
                r2=new Row();
                autp2 = new BotonCaintra("AUTORIZAR", 100, "per2");
                cancelar = new BotonCaintra("CANCELAR", 100, "can2");
                imp_rep2 = new BotonCaintra("IMPRIMIR REPORTE", 100, "rep2");
                seg2 = new BotonCaintra("SEGURO", 100, "seg2");
                per=2;
                autp2.addActionListener(this);
                cancelar.addActionListener(this);
                imp_rep2.addActionListener(this);
                seg2.addActionListener(this);
                this.vista.lb_cuenta.setVisible(true);
                this.vista.txt_cuenta.setVisible(true);
                this.vista.ok_cuenta.setVisible(true);
                this.vista.movimientos.setVisible(true);
                r2.add(seg2);
                r2.add(this.vista.lb_cuenta);
                r2.add(this.vista.txt_cuenta);
                r2.add(this.vista.ok_cuenta);
                r2.add(this.vista.movimientos);
                cl.add(r2);
                cl.add(this.vista.prac_tab2);
                cl.add(this.vista.total_t);
                cl.add(autp2);
                cl.add(cancelar);
                cl.add(imp_rep2);
                cl.setInsets(new Insets(20, 20, 0, 0));
                cp.add(cl);
                this.vista.window_pref_per.setContentPane(cp);
                this.vista.window_pref_per.setWidth(new Extent(1300));
                this.vista.window_pref_per.setHeight(new Extent(500));
                refresh2();
                if (factura != null&&fac_Detalle2!=null) {
                    this.vista.prac_tab2.setLista_Pract_Autorizada(fac_Detalle2);
                    this.vista.total_t.setLista_Total_Autorizada(factura);
                    cancelar.setVisible(true);
                    autp2.setVisible(false);
                    imp_rep2.setVisible(true);
                    r2.setVisible(false);
                    this.vista.window_pref_per.setTitle("PERIODO AUTORIZADO");
                } else {
                    Lista_Mayor2=query.getFactura_Practicante(fecha2);
                    if(!Lista_Mayor2.isEmpty()&&Lista_Mayor2!=null){

                        group_By_PracticanteQM();
                        Lista_Mayor=query.getFactura_Practicante(fecha);
                        group_By_Practicante();
                         if(fact==null){
                        Lista_Pantalla2=establecerRetroactivoz(Lista_Pantalla2, Lista_Pantalla);
                        this.vista.prac_tab2.setLista_Practicante(Lista_Pantalla2);
                        }else{
                             Lista_Pantalla2=establecerRetroactivo2(Lista_Pantalla2, fac_Detalle1);
                            this.vista.prac_tab2.setLista_Practicante(Lista_Pantalla2);
                        }

                 this.vista.total_t.setLista_Totales(getTotales(this.vista.prac_tab2.getMonto_a_pagar(), this.vista.prac_tab2.getSeguro_empresa(), _abono, _adeudo));
                 r2.setVisible(true);
                    cancelar.setVisible(false);
                    autp2.setVisible(true);
                    imp_rep2.setVisible(false);
                    this.vista.window_pref_per.setTitle("PERIODO:" + fecha2.toString());
                    this.vista.prac_tab2.getSelectionModel().clearSelection();
                    }else{
                        this.vista.window_error.mensaje_Panel("prefactura_sin_practicante");
                        return;
                    }
                }
    }

    public ArrayList<Practicante> establecerRetroactivo(ArrayList<Practicante> l){
        Practicante aux=new Practicante();
        List<Facturaajuste> lizt=new ArrayList<Facturaajuste>();
        for(int i=0;i<l.size();i++){
                aux=l.get(i);
                lizt=query.getAjustes(aux.getPracticanteId(), fecha2.getCalendarioFacturacionPracticantesId());

                if(lizt!=null&&!lizt.isEmpty()){
                    for(int j=0; j<lizt.size();j++){
                     double aju=lizt.get(j).getFactor()-aux.getDias();
                     lizt.get(j).setFactor(aju);
                    aux.setAjustedia((int)lizt.get(j).getFactor());
                    //lizt.get(j).setFk_periodoId(fecha.getCalendarioFacturacionPracticantesId());
                }

            }

                }

        return l;

    }

    public ArrayList<Practicante> establecerRetroactivo2(ArrayList<Practicante> l2,List<PrefacturaDetalle> l){
      Practicante aux=new Practicante();
      PrefacturaDetalle aux2=new PrefacturaDetalle();
        List<Facturaajuste> lizt=new ArrayList<Facturaajuste>();
        for(int i=0;i<l2.size();i++){
                aux=l2.get(i);
                aux2=l.get(i);

                if(aux2.getPracticante_Id()==aux.getPracticanteId()){
                lizt=query.getAjustes(aux.getPracticanteId(), fecha2.getCalendarioFacturacionPracticantesId());

                if(lizt!=null&&!lizt.isEmpty()){
                    for(int j=0; j<lizt.size();j++){
                    double aj=aux.getAjustedia()-lizt.get(j).getFactor();
                    aux.setAjustedia((int)aj);
                }
                    }
            }else{
                    l.add(i, aux2);
                    System.out.println("ezte no entra"+aux.getPracticanteId());
                    //continue;

            }

                }
     return l2;
    }

        public ArrayList<Practicante> establecerRetroactivoz(ArrayList<Practicante> l2,ArrayList<Practicante> l){
       Practicante aux=new Practicante();
      Practicante aux2=new Practicante();
        List<Facturaajuste> lizt=new ArrayList<Facturaajuste>();
        for(int i=0;i<l2.size();i++){
                aux=l2.get(i);
                aux2=l.get(i);

                if(aux2.getPracticanteId()==aux.getPracticanteId()){
                lizt=query.getAjustes(aux.getPracticanteId(), fecha2.getCalendarioFacturacionPracticantesId());

                if(lizt!=null&&!lizt.isEmpty()){
                    for(int j=0; j<lizt.size();j++){
                     double aj=aux.getAjustedia()-lizt.get(j).getFactor();
                    aux.setAjustedia((int)aj);
                    int res = dPracticante.UpdateSeguroRetro(aux2.getPracticanteId(), false, this.fecha.getCalendarioFacturacionPracticantesId(), this.fecha2.getCalendarioFacturacionPracticantesId());
                    int res2 = dPracticante.UpdateSeguroRetro(aux.getPracticanteId(), true, this.fecha2.getCalendarioFacturacionPracticantesId(), this.fecha2.getCalendarioFacturacionPracticantesId());

                   System.out.println("los valores son"+res+","+res2);
                }
                    }
            }else if(aux.getNombre().equals(aux2.getNombre())&& aux.getPaterno().equals(aux2.getPaterno())
                    && aux.getMaterno().equals(aux.getMaterno())){

                lizt=query.getAjustes(aux.getPracticanteId(), fecha2.getCalendarioFacturacionPracticantesId());

                if(lizt!=null&&!lizt.isEmpty()){
                    for(int j=0; j<lizt.size();j++){
                     double aj=aux.getAjustedia()-lizt.get(j).getFactor();
                    aux.setAjustedia((int)aj);

                    int res = dPracticante.UpdateSeguroRetro(aux.getPracticanteId(), true, this.fecha2.getCalendarioFacturacionPracticantesId(), this.fecha2.getCalendarioFacturacionPracticantesId());
                    int res2= dPracticante.UpdateSeguroRetro2(aux.getPracticanteId(), false, aux2.getPracticanteId(), fecha.getCalendarioFacturacionPracticantesId());

                   System.out.println("los valores son"+res+","+res2);
                }
                    }


                }else{
                    l.add(i, aux2);
                    System.out.println("ezte no entra"+aux.getPracticanteId());
                }
            }


     return l2;
    }

    public void imprimir_excel(int id){
        PrefacturaCaintra f_new=null;
        List<PrefacturaDetalle> f_detalle;
        DecimalFormat fd = new DecimalFormat("###########0.00");
        try {
            f_new=query.isPeriodo_Autorizado(id);
            if(per==1){
            f_new.setPeriodo(fecha.getDia_inicio(), fecha.getDia_fin());
            }
            if(per==2){
            f_new.setPeriodo(fecha2.getDia_inicio(), fecha2.getDia_fin());
            }
            f_detalle=query.getFactura_Detalle(f_new.getPrefacturaId());
            if(f_new == null)
                return;
            if(f_detalle == null || f_detalle.isEmpty())
                return;
            ReporteExcel rep=new ReporteExcel();
            rep.imprimir_excel(f_new, f_detalle);
        }catch(Exception ex){

        }
    }

    public void actionPerformed(ActionEvent e) {
        try {
            if (e.getActionCommand().equals("selectTableQM")) {
                try {
                    if (tipo_usuario != Administrador) {
                        return;
                    }
                    if (!this.vista.tabla_qm.getSelectionModel().isSelectionEmpty()) {
                        try {
                            seleccion_practicante = this.vista.tabla_qm.getSelectionModel().getMinSelectedIndex();
                            p_sel = (Practicante) Lista_Pantalla.get(seleccion_practicante);
                            Lista_Detalle = (ArrayList<Practicante>) Lista_Pract_Hm.get("pract_id_" + p_sel.getPracticanteId());
                            if (Lista_Detalle == null || Lista_Detalle.isEmpty()) {
                                this.vista.b_seguro.setVisible(false);
                                return;
                            }


                            if (Lista_Detalle.size() > 1) {
                                this.vista.b_seguro.setVisible(false);
                            } else {
                                //this.vista.b_seguro.setVisible(true);
                            }
                        } catch (Exception ex) {
                        }

                    } else {
                    }
                } catch (Exception exc) {
                    error("lb_error_cargapagina");
                    return;
                }
            }
            if (e.getActionCommand().equals("sel_empresa")) {
                Action_selectEmpresa();
            }
            if (e.getActionCommand().equals("sel_periodo")) {
                Action_selectPeriodo();
                this.vista.sel_periodo2.setSelectedItem(fecha2);
            }
            ///////////////////////////////////////////////
            if (e.getActionCommand().equals("sel_periodo2")) {
                Action_selectPeriodo2();
            }

            if (e.getActionCommand().equals("autorizar")) {
                autorizarQM();
            }
            if (e.getActionCommand().equals("cancelar")) {
                cancelarQM(fecha2);
            }
            if (e.getActionCommand().equals("v_reporte")) {
                int seleccion_reporte = -1;
                if (this.vista.sel_vista_reporte.getSelectionModel().isSelectionEmpty()) {
                    error("Favor de Seleccionar el tipo de reporte deseado");
                    return;
                } else {
                    seleccion_reporte = this.vista.sel_vista_reporte.getSelectedIndex();
                    imprimirJasper(seleccion_reporte);
                }


            }

            if (e.getActionCommand().equals("update_pref")) {
                refreshTabla();
            }

            if (e.getActionCommand().equals("verperiodo1")) {
               establecerPer1();
            }

            if (e.getActionCommand().equals("verperiodo2")) {
              establecerPer2();
            }


            if (e.getActionCommand().equals("ok_cuenta")) {//movimiento
                guardar_Cuenta();
            }
            if (e.getActionCommand().equals("movimiento")) {
                try {
                    if(per==1){
                    Action_selectTable();}
                    if(per==2){
                        Action_selectTable2();
                    }
                } catch (Exception exc) {
                    error("lb_error_cargapagina");
                    return;
                }
            }
            if (e.getActionCommand().equals("abono_adeudo")) {//movimiento
                abono_adeudo();
            }

            /////////////////////////////////////////////////////////////////////////////////
            if (e.getActionCommand().equals("per1")) {//movimiento
                autorizar(fecha);
                autorizada1 = true;
                this.autp1.setVisible(false);
                this.cancelar.setVisible(true);
            }

            if (e.getActionCommand().equals("per2")) {//movimiento
                autorizar(fecha2);
                autorizada2 = true;
                this.autp2.setVisible(false);
                this.cancelar.setVisible(true);

            }

            if (e.getActionCommand().equals("can")) {//movimiento
                cancelar(fact, fecha);
                autorizada1 = false;
                this.autp1.setVisible(true);
                this.cancelar.setVisible(false);
            }

            if (e.getActionCommand().equals("can2")) {//movimiento
                cancelar(factura, fecha2);
                autorizada2 = false;
                this.autp2.setVisible(true);
                this.cancelar.setVisible(false);
            }

            if (e.getActionCommand().equals("seg1")) {//movimiento
                Action_seguro1();
            }
            if (e.getActionCommand().equals("seg2")) {//movimiento
                Action_seguro2();
            }

            if (e.getActionCommand().equals("rep1")) {//movimiento
                imprimir_excel(fecha.getCalendarioFacturacionPracticantesId());
            }
            if (e.getActionCommand().equals("rep2")) {//movimiento
                imprimir_excel(fecha2.getCalendarioFacturacionPracticantesId());
            }

        } catch (Exception exc) {
            error("lb_error_cargapagina" + exc.getMessage());
            return;
        }
    }


}
